﻿using ConfExpert.Forms.Rapor.Aksesuar;
using ConfExpert.Utility;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraReports.UI;
using DevTeam;
using System;
using System.Data;
using System.Windows.Forms;

namespace ConfExpert.Forms.Depo
{
    public partial class AksesuarCikisTalebi : XPopupForm
    {
        string XmlTable, Idxs;
        int BrandId, SezonId;
        bool IsBoyama;
        bool IsManuelCikis = false;
        bool IsFazlaKesim = false;
        string aksesuarCikisTalebiId;

        public DataTable dtTransfer { get; set; }
        public string DosyaNo { get; set; }
        public int CariId { get; set; }
        public string OrderRef { get; set; }
        public string AksesuarCikisTalebiId
        {
            get { return aksesuarCikisTalebiId; }
        }

        public AksesuarCikisTalebi()
        {
            InitializeComponent();
        }
        public AksesuarCikisTalebi(string Xml)
            : this()
        {
            XmlTable = Xml;
        }

        public AksesuarCikisTalebi(string Xml, DataTable dtTransfer, bool ManuelCikis)
            : this(Xml)
        {
            this.dtTransfer = dtTransfer;
            this.IsManuelCikis = ManuelCikis;
        }

        public AksesuarCikisTalebi(string Xml, string DosyaNo, int BrandId, int SezonId, string OrderRef, bool IsBoyama, string Idxs, int CariId)
            : this(Xml)
        {
            this.DosyaNo = DosyaNo;
            this.BrandId = BrandId;
            this.SezonId = SezonId;
            this.Idxs = Idxs;
            this.IsBoyama = IsBoyama;
            this.OrderRef = OrderRef;
            this.CariId = CariId;

            lblUretici.Visible = gleBoyama.Visible = IsBoyama;
        }

        public AksesuarCikisTalebi(string Xml, string DosyaNo, int BrandId, int SezonId, string OrderRef, bool IsBoyama, string Idxs, int CariId, bool IsFazlaKesim)
            : this(Xml, DosyaNo, BrandId, SezonId, OrderRef, IsBoyama, Idxs, CariId)
        {
            this.IsFazlaKesim = IsFazlaKesim;
        }


        private void AksesuarCikisTalebi_Load(object sender, EventArgs e)
        {
            string harekettipleri = ytk(199) ? "10,11,13,14,15,30,35" : "10,11,13,14,15,30";

            DataTable dt = AppSession.Lookups.HareketTipi.Select("HareketTipiId in (" + harekettipleri + ")").CopyToDataTable();
            RepositoryItemGridLookUpEdit riCikisTipi = GetCustomGLE(dt, "Name", "HareketTipiId");
            gleCikisTipi.Properties.Assign(riCikisTipi);
            gleCikisTipi.Properties.TextEditStyle = TextEditStyles.DisableTextEditor;

            gleBoyama.Properties.Assign(RI(Rp.V_CariV));
            gle.Properties.Assign(RI(Rp.Cari));

            GetDetails("SODetay", "GetOrderRefByBrand", BrandId);

            gleOrderRef.Properties.Assign(GetIntellisensedRI(ds.SODetay));
            gleOrderRef.Properties.ProcessNewValue += new ProcessNewValueEventHandler(ri_ProcessNewValue2);
            gleOrderRef.Properties.View.Columns["BrandId"].ColumnEdit = RI(Rp.Brand);
            gleOrderRef.Properties.View.Columns["SezonId"].ColumnEdit = RI(Rp.Sezon);
            gleOrderRef.EditValueChanged += gleOrderRef_EditValueChanged;

            gleBrand.Properties.Assign(RI(Rp.Brand));
            gleSezon.Properties.Assign(RI(Rp.Sezon));

            gleBrand.EditValue = BrandId;
            gleSezon.EditValue = SezonId;
            gleOrderRef.EditValue = OrderRef;
            txtDosyaNo.Text = DosyaNo;

            if (IsFazlaKesim)
                gleCikisTipi.EditValue = 14;
            else if (DosyaNo.ToStr() != "")
                gleCikisTipi.EditValue = 10;
            else
                gleCikisTipi.EditValue = 0;
            
            gleOrderRef.Enabled = OrderRef.IsNullOrWhiteSpace() && BrandId != 47;
            gleBrand.Enabled = BrandId.ToInt() == 0;
            gleSezon.Enabled = SezonId.ToInt() == 0;
            gleCikisTipi.Enabled = DosyaNo.ToStr() == "";
            txtDosyaNo.Enabled = DosyaNo.ToStr() == "";

            btnOk.Click += new EventHandler(btnOk_Click);
            btnCancel.Click += new EventHandler(btnCancel_Click);

            gleKaynak.Properties.Assign(GetGlKaynak());
            gleKaynak.EditValueChanged += new EventHandler(gleKaynak_EditValueChanged);
            gleCikisTipi.EditValueChanged += gleCikisTipi_EditValueChanged;
            gleKaynak.EditValue = 4;
            gle.EditValue = CariId;
        }

        void gleCikisTipi_EditValueChanged(object sender, EventArgs e)
        {
            gle.Enabled =
            gleBoyama.Enabled =
            gleBrand.Enabled =
            gleKaynak.Enabled =
            gleOrderRef.Enabled =
            gleSezon.Enabled =
            txtDosyaNo.Enabled = gleCikisTipi.EditValue.ToInt() != 35;
        }

        void gleOrderRef_EditValueChanged(object sender, EventArgs e)
        {
            if (gleOrderRef.Properties.View.GetFocusedRow() != null)
            {
                DataRow dr = ((DataRowView)gleOrderRef.Properties.View.GetFocusedRow()).Row;
                gleBrand.EditValue = intParse(dr["BrandId"]);
                gleSezon.EditValue = intParse(dr["SezonId"]);
            }
        }

        void gleKaynak_EditValueChanged(object sender, EventArgs e)
        {
            gle.Enabled = true;
            gle.EditValue = null;

            switch (intParse(gleKaynak.EditValue))
            {
                case 1: //Tedarikçi
                    gle.Properties.Assign(RI(Rp.V_CariV));
                    break;
                case 2: //Müşteri
                    gle.Properties.Assign(RI(Rp.V_CariC));
                    break;
                case 4: //Atölye
                    gle.Properties.Assign(RI(Rp.V_CariA));
                    break;
            }
        }
        
        private void btnOk_Click(object sender, EventArgs e)
        {
            int CikisTipi = gleCikisTipi.EditValue.ToInt();
            int tip = intParse(gleKaynak.EditValue);
            int gleId = intParse(gle.EditValue);
            int UreticiCariId = gleBoyama.EditValue.ToInt();

            if (CikisTipi == 0)
            {
                ShowErrorMessage("Çıkış tipi boş olamaz!");
                return;
            }

            if (CikisTipi == 35)
            {
                ExecuteNonQuery("InsAksesuarSayimEksigi", XmlTable, WhoAmI, txtNot.Text);
                XtraMessageBox.Show("Belirttiğiniz miktarlar stoklardan düşüldü .");
                this.DialogResult = DialogResult.OK;
            }

            else
            {
                if (intParse(gleBrand.EditValue) == 0)
                {
                    ShowErrorMessage("Marka boş olamaz!");
                    return;
                }
                if (intParse(gleSezon.EditValue) == 0)
                {
                    ShowErrorMessage("Sezon boş olamaz!");
                    return;
                }
                if (IsBoyama && UreticiCariId == 0)
                {
                    ShowErrorMessage("Boyama yeri boş olamaz!");
                    return;
                }

                if (CikisTipi == 10 && txtDosyaNo.Text.ToStr() == "")
                {
                    ShowErrorMessage("Üretim çıkışlarında dosya numarası boş olamaz!");
                    return;
                }

                if (IsManuelCikis)
                {
                    string xmlSel = dtTransfer.Serialize();// XML.SerializeAll(dtTransfer);
                    string str = string.Empty;


                    DataTable xBuffer = ExecuteDataTable("AksesuarTransferKontrol",
                        xmlSel,
                        gleOrderRef.EditValue,
                        intParse(gleBrand.EditValue),
                        intParse(gleSezon.EditValue),
                        WhoAmI,
                        false,
                        'C'
                        );

                    if (xBuffer.Rows.Count > 0)
                        if (xBuffer.Rows[0]["intVal"].ToInt() > 0)
                        {
                            string oid = string.Empty;
                            foreach (DataRow r in xBuffer.Rows)
                                oid += r["intVal"].ToString() + Environment.NewLine;

                            if (xBuffer.Rows[0]["strVal"].ToString().IsNullOrWhiteSpace())
                                XtraMessageBox.Show("İşleme devam edebilmek için OwnerId'si (sahibi) uyumsuz aksesuarları sepetinizden çıkarmalısınız:\n\n" + oid, "İşlem başarısız");
                            else
                            {
                                switch (xBuffer.Rows[0]["strVal"].ToStr())
                                {
                                    case "YetkisizDepodan":
                                        foreach (DataRow r in ds.xBuffer)
                                            str += r["intVal"].ToString() + Environment.NewLine;
                                        XtraMessageBox.Show("Aşağıdaki topları önce kendi deponuza transfer etmelisiniz:\n\n" + str, "İşlem başarısız");
                                        break;

                                    case "YetkisizDepoya":
                                        XtraMessageBox.Show("Çıkış yapabilmek için, bu müşterinin MT/Planlamacısı olmanız gerekir.", "İşlem başarısız");
                                        break;

                                }
                            }

                            return;
                        }
                        else
                            str = "Onay gerektiren aksesuarlar için istek oluşturuldu. Takip için IstekId: " + xBuffer.Rows[0]["strVal"].ToString();


                    if (str != string.Empty)
                        XtraMessageBox.Show(str);
                }

                //TODO K.A: DU4 ürün ağacını sipariş sayfasına taşıdığımızda aşağıdaki sp ve if bloğunu sil 
                if (BrandId == 47)
                    aksesuarCikisTalebiId = ExecuteScalar("InsAksesuarCikisTalebiforDu4", XmlTable, CikisTipi, gleOrderRef.EditValue, gleBrand.EditValue, gleSezon.EditValue, tip, gleId,
                                                txtNot.Text, WhoAmI, txtDosyaNo.Text, Idxs, IsManuelCikis).ToStr();
                else
                    aksesuarCikisTalebiId = ExecuteScalar("InsAksesuarCikisTalebi", XmlTable, CikisTipi, gleOrderRef.EditValue, gleBrand.EditValue, gleSezon.EditValue, tip, gleId,
                                                txtNot.Text, WhoAmI, txtDosyaNo.Text, IsBoyama, Idxs, UreticiCariId, IsManuelCikis).ToStr();

                XtraMessageBox.Show(string.Format("{0} nolu Çıkış Talebi/Talepleri başarıyla oluşturulmuştur.", aksesuarCikisTalebiId), "Çıkış Emri");
                this.DialogResult = DialogResult.OK;

                if (IsBoyama)
                {
                    int AksesuarCikisTalebiId;
                    if (aksesuarCikisTalebiId.Contains(","))
                        AksesuarCikisTalebiId = aksesuarCikisTalebiId.Substring(0, aksesuarCikisTalebiId.LastIndexOf(',')).ToInt();
                    else
                        AksesuarCikisTalebiId = aksesuarCikisTalebiId.ToInt();
                    xrDugmeBoyamaRaporu aks = new xrDugmeBoyamaRaporu(AksesuarCikisTalebiId, gleBrand.EditValue.ToInt(), "GetDugmeBoyamaRaporu");
                    aks.ShowPreviewDialog();
                }
            }
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
        }

    }
}